import Dict from './Dict';
import { mergeOptions } from './DictOptions';

export default function (Vue, options) {
  mergeOptions(options);
  Vue.mixin({
    data() {
      if (this.$options === undefined || this.$options.dicts === undefined || this.$options.dicts === null) {
        return {};
      }
      const dict = new Dict();
      dict.owner = this;
      return {
        dict,
      };
    },
    created() {
      if (!(this.dict instanceof Dict)) {
        return;
      }
      options.onCreated && options.onCreated(this.dict);
      this.dict.init(this.$options.dicts).then(() => {
        options.onReady && options.onReady(this.dict);
        this.$nextTick(() => {
          this.$emit('dictReady', this.dict);
          if (this.$options.methods && this.$options.methods.onDictReady instanceof Function) {
            this.$options.methods.onDictReady.call(this, this.dict);
          }
        });
      });
    },
  });
}
